<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>symbol</title>
  </head>
  <body>
    <div></div>
    <script>
      //1、Symbol 也是一种数据类型，但是不是字符串，也不是对象，而是一种新的数据类型
      //七种基础数据类型分别是:

      // undefined,null,Boolean,Number,String,Object,Symbol

      //使用方法：
      //2、Symbol() Symbol('描述信息') 每次调用时都会返回唯一的 Symbol
      let s1 = Symbol()
      let s2 = Symbol()
      console.log(s1 == s2) //false
      console.log(typeof s1)

      let s3 = Symbol("hello")
      let s4 = Symbol("hello")
      console.log(s3 === s4)

      //3、Symbol.for(str) 从Symbol 全局环境返回相应的symbol，与上个方法不同的是Symbol全局环境中先检查给定的key是否已经存在。也就是说如果你调用ymbol.for（"cat”）三次，都将返回相同的Symbol
      //区别：Symbol（）每次都是新的；Symbol.for（string）只会在第一出创建新的，后续返回第一次的创建！！

      let s5 = Symbol.for("hello")
      let s6 = Symbol.for("hello")
      console.log(s5 === s6) //true

      //4、symbol.keyFor（string）方法返回一个已登记的Symbol类型值的key。未登记的Symbol值，返回undefined。
      console.log(Symbol.keyFor(s5)) //hello
      console.log(Symbol.keyFor(s1)) //undefined
    </script>
  </body>
</html>
